<?php
declare (strict_types=1);

namespace app\validate\admin;

use app\validate\BaseValidate;

class Manager extends BaseValidate
{
    /**
     * 定义验证规则
     * 格式：'字段名'    =>    ['规则1','规则2'...]
     *
     * @var array
     */
    protected $rule = [
        'page' => 'require|integer|>:0',
        'id' => 'require|integer|>:0|isExist:Manager',
        'username|用户名' => 'require|min:5|max:20',
        'password|密码' => 'require|min:5|max:20',
        'status' => 'require|in:0,1',
        'avator' => 'url',
        'role_id' => 'require|integer|>:0',
    ];

    /**
     * 定义错误信息
     * 格式：'字段名.规则名'    =>    '错误信息'
     *
     * @var array
     */
    protected $message = [];

    //指定验证规则
    protected $scene = [
//        'save' => ['username', 'password', 'status', 'role_id', 'avator'],
//        'update' => ['id', 'username', 'password', 'status', 'role_id', 'avator'],
        'delete' => ['id'],
        'index' => ['page'],
        'updateStatus'=>['id','status'],
    ];




//创建管理员
    public function sceneSave()
    {
        return $this->only(['username', 'password', 'status', 'role_id', 'avator'])
            ->append('username', 'unique:manager');
    }

// 修改管理员场景  排除掉自身的username
    public function sceneUpdate()
    {
        $id = request()->param('id');
        return $this->only(['id', 'username', 'password', 'status', 'role_id'])
            ->remove('username', 'unique:manager')
            ->append('username', 'unique:manager,username,' . $id);
    }

    //登录
    public function sceneLogin()
    {
        return $this->only(['username', 'password'])->append('password', 'checklogin');
    }
    // 自定义验证规则
    // 验证账号密码
    public function checklogin($value, $rule = '', $data = '', $field = '')
    {
        // 验证账号
        $M = \app\model\Manager::where('username', $data['username'])->find();
        if (!$M) return '用户名错误';
        // 验证密码
        if (!password_verify($data['password'], $M->password)) {
            return '密码错误';
        }
        // 将当前用户实例挂在到request
        request()->UserModel = $M;
        return true;
    }

}








